package modulo4.main;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;
import modulo4.model.ErrorDeValidacion;
import modulo4.model.ValidadorHTML;
import modulo4.util.CenteredFormat;

public class HTMLyExcelTest {

    private final static Scanner scanner = new Scanner(System.in);
    private static ValidadorHTML validador;

    public static void main(String[] args) {
        procesarMenu();
    }

    public static void procesarMenu() {
        int opcion = 0;

        do {
            imprimirMenu();

            if (!scanner.hasNextInt()) {
                opcion = -1;
                System.err.println("La opción debe ser un número");
                continue;
            }

            opcion = scanner.nextInt();

            switch (opcion) {
                case 0:
                    //salir
                    break;
                case 1:
                    validarArchivoHTML();
                    break;
                default:
                    System.err.println("Opción incorrecta, intente de nuevo.");
            }

            if (opcion != 0) {
                System.out.println("Presione Enter para continuar...");
                scanner.nextLine();
            }
        } while (opcion != 0);
    }

    public static void validarArchivoHTML() {
        scanner.nextLine();

        Path path;
        String rutaArchivo;
        try {
            if (validador != null && validador.estaValidado() && !validador.esDocumentoValido()) {
                System.out.print("Ultimo documento con errores: ");
                System.out.println(validador.getPath());
                System.out.print("Ingrese una ruta diferente o <enter> para validar de nuevo el último documento con errores: ");

                rutaArchivo = scanner.nextLine();
                
                if (rutaArchivo.trim().length() > 0) {
                    path = Paths.get(rutaArchivo);
                } else {
                    path = validador.getPath();
                }
                
                validador.setPath(path);
            } else {
                System.out.print("Ingrese la ruta del archivo a validar: ");
                rutaArchivo = scanner.nextLine();
                path = Paths.get(rutaArchivo);

                if (validador == null) {
                    validador = new ValidadorHTML(path);
                } else {
                    validador.setPath(path);
                }
            }

            validador.validarDocumento();

            if (validador.esDocumentoValido()) {
                System.out.println("¡El archivo es válido!");
            } else {
                System.out.println("Se encontraron los siguientes errores:");

                System.out.println(String.format("%#5s %-7s %#40s %#50s",
                        new CenteredFormat("Fila"), "Columna",
                        new CenteredFormat("Tipo"),
                        new CenteredFormat("Descripción")));

                for (ErrorDeValidacion error : validador.obtenerErrores()) {
                    System.out.println(error);
                }
            }
        } catch (IOException ioe) {
            System.err.println("Hubo algún problema al leer el archivo.");
            System.err.println("Asegurese que exista y/o tenga permisos para leerlo.");
            System.err.println("Presione <Enter> para continuar.");

        }
    }

    public static void imprimirMenu() {
        System.out.println("Menu:");
        System.out.println("1.- Validar documento HTML.");
        System.out.println("2.- Convertir tabla HTML a excel.");
        System.out.println("3.- Convertir archivo excel(csv) a HTML.");
        System.out.println("0.- Salir.");
        System.out.print("Elija una opción: ");
    }
}
